/*global document */
$(function() {
    // 移除文档中的空文本结点
    var txtNodes = getTextNodes(document.body,function(node){
        var v = node.data;
        return /^[\s\ufeff]*$/.test(v)&& v.length > 3;
    });
    $.each(txtNodes,function(){
        var p = this.parentNode;
        if($(p).closest(".source").length==0){
            p.removeChild(this);
        }
    });
    $(".members > dt,.methods > dt,.events > dt").click(function(){
        $(this).next("dd").slideToggle();
    });
});

/**
 * 查找并返回指定父级元素下的文本结点
 * @param {Element} parent 父级元素
 * @param {Function} filter 用于筛选文本结点的方法
 * @returns {Array} 文本结点
 */
function getTextNodes(parent, filter){
    var nodes=[],f=filter;
    if(typeof f !== "function")
        f=false;
    if(parent&&parent.nodeType&&parent.nodeType===1){
        var n=parent.firstChild;
        while(n&&n!==parent){
            var t=n;
            if (t.nodeType === 3) {
                if(!f||f(t))
                    nodes.push(t);
                n=t.nextSibling;
            }
            else if (t.nodeType === 1) {
                n=t.firstChild;
                if(!n)
                    n=t.nextSibling;
            }
            else
                n=t.nextSibling;
            while(!n){
                n=t.parentNode;
                if(n!==parent){
                    t=n;
                    n=n.nextSibling;
                }
            }
        }
    }
    return nodes;
}